import axios from 'axios';
import { ElMessage } from 'element-plus';
import router from '@/router';
import { useUserStore } from '@/stores/user';

// 创建axios实例
const service = axios.create({
  // 设置正确的后端API地址
  // baseURL: 'http://127.0.0.1:8000',
  baseURL: 'http://oms.aidly.cn',

  timeout: 30000 // 请求超时时间
});

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 从pinia获取token（注意：在拦截器中不能直接使用pinia，需要动态获取）
    let token = '';
    try {
      // 通过localStorage获取token作为备选
      token = useUserStore().token || localStorage.getItem('token') || '';
    } catch (error) {
      // 尝试直接从localStorage获取token
      token = localStorage.getItem('token') || '';
      console.error('获取token失败:', error);
    }
    
    // 如果有token，添加到请求头
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }

    console.log('请求配置:', config.url, config.params);
    return config;
  },
  error => {
    console.error('请求错误:', error);
    return Promise.reject(error);
  }
);
// 响应拦截器
service.interceptors.response.use(
  response => {
    // 如果返回的是二进制数据（如导出文件），直接返回完整响应对象
    if (response.config.responseType === 'blob') {
      // 返回blob数据，而不是整个response对象
      return response.data;
    }
    // 普通请求，返回数据部分
    return response.data;
  },
  error => {
    // 获取错误状态码
    const status = error.response ? error.response.status : undefined;
    const url = error.config ? error.config.url : '';
    
    // 禁止对特定资源的404错误显示提示
    const isSilentRequest = url.includes('/api/static/') || 
                           url.includes('/images/') || 
                           url.includes('/assets/');
    
    if (status === 401) {
      // 未授权，清空用户信息并跳转到登录页
      if (!isSilentRequest) {
        ElMessage.error('登录已过期，请重新登录');
      }
      try {
        useUserStore().resetState();
      } catch (error) {
        // 忽略错误
      }
      router.push('/login');
    } else if (status === 403) {
      // 权限不足
      if (!isSilentRequest) {
        ElMessage.error('权限不足，无法访问');
      }
      router.push('/403');
    } else if (status === 404) {
      // 资源不存在 - 对于静态资源请求不显示错误
      if (!isSilentRequest) {
        console.log(`资源不存在: ${url}`, error);
        // 只对API请求显示错误，静态资源不显示
        if (url.includes('/api/') && !url.includes('/api/static/')) {
          ElMessage.error('请求的资源不存在');
        }
      }
    } else if (status === 500) {
      // 服务器错误
      if (!isSilentRequest) {
        ElMessage.error('服务器错误，请稍后再试');
      }
    } else {
      // 其他错误
      if (!isSilentRequest) {
        ElMessage.error(error.response?.data?.message || '请求失败');
      }
    }
    
    return Promise.reject(error);
  }
);

export default service; 